/* eslint valid-jsdoc: "off" */

'use strict';

/**
 * @param {Egg.EggAppInfo} appInfo app info
 */
module.exports = appInfo => {
  /**
   * built-in config
   * @type {Egg.EggAppConfig}
   **/
  const config = exports = {};

  // use for cookie sign key, should change to your own and keep security
  config.keys = appInfo.name + '_1569220882279_6509';

  // add your middleware config here
  config.middleware = [];

  config.security = {
    // 默认的 egg-security 插件对以上三种 非安全方法 进行了 CSRF 校验。解决办法是在 config.default.js 中关闭校验
    csrf: false,
  };

  // 参数校验
  // config.validate = {
  // }
  config.validatePlus = {
    convert: true,
    resolveError(ctx, errors) {
      if (errors.length) {
        ctx.type = 'json';
        ctx.status = 400;
        ctx.body = {
          code: 400,
          error: errors,
          message: '参数错误',
        };
      }
    },
  };

  // mongoDB配置
  config.mongoose = {
    client: {
      url: 'mongodb://127.0.0.1:27017/test',
      options: {},
    },
  };

  // 统一异常配置
  config.onerror = {
    // 在此处定义针对所有响应类型的错误处理方法
    // 注意，定义了 config.all 之后，其他错误处理方法不会再生效
    // all(error, ctx) {
    //   ctx.body = 'error';
    //   ctx.status = 430;
    // },
    html(error, ctx) {
      ctx.body = `<h3>${error.message}</h3>`;
      ctx.status = 530;
    },
    json(error, ctx) {
      ctx.body = {
        message: error.message,
        code: 500,
      };
      ctx.status = 430;
    },
  };

  // swagger2 配置
  config.swagger2 = {
    base: {
      info: {
        description: '这是Egg的Swagger文档',
        version: '1.0.0',
        title: 'Egg-Swagger',
        // 联系开发者
        /* contact: {
          email: 'example@deepexi.com',
        }, */
        // 证书
        /* license: {
          name: 'Apache 2.0',
          url: 'http://www.apache.org/licenses/LICENSE-2.0.html',
        }, */
      },
      tags: [
      ],
      definitions: {
      // model definitions
      },
      // securityDefinitions: {
      // security definitions
      // },
    },
  };

  // add your user config here
  const userConfig = {
    // myAppName: 'egg',
    eureka: {
      client: {
        // 当前项目注册到eureka的配置
        instance: {
          app: 'egg-service',
          ipAddr: '127.0.0.1',
          vipAddress: 'deepexi.foo',
          port: 8080,
        },
        //  eureka 服务
        server: {
          host: '127.0.0.1',
          port: 8083,
        },
        // auth: {
        //   user: 'admin',
        //   password: 'deepexi',
        // },
      },
    },
  };

  return {
    ...config,
    ...userConfig,
  };
};
